package generic;

/**
 * @author ChangLiang
 * @date 2021/2/1
 */
class Manipulator<T> {
    private T obj;

    public Manipulator(T x) {
        obj = x;
    }

    // Error: cannot find symbol: method f():
    public void manipulate() {
        /**
         * 由于有了擦除， Java编译器无法将manipulate()必须能够在obj上调用f这一需求映射到
         * HasF拥有f()这一事实上。
         * 为了调用f()，我们必须协助泛型类，给定泛型类的边界，以此告知编译器只能接受遵循这个边界的类型。
         */
//        obj.f();
    }
}

public class Manipulation {

    public static void main(String[] args) {
        HasF hf = new HasF();
        Manipulator<HasF> manipulator = new Manipulator<>(hf);
        manipulator.manipulate();
    }
}
